package sessionbeans;

import java.util.List;
import java.util.Vector;

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import dtofactory.FactoryDTO;

import entities.Articulo;
import entities.CantidadMateriaPrima;
import entities.MateriaPrima;
import entities.PedidoFabricacion;
import entities.StockMateriaPrima;
import entitiesdto.CantidadMateriaPrimaDTO;
import entitiesdto.MateriaPrimaDTO;
import entitiesdto.StockMateriaPrimaDTO;

public @Stateless class AdminMateriaPrimaBean implements AdminMateriaPrima {

	FactoryDTO dtoFactory;

	@PersistenceContext
	private EntityManager manager;

	public AdminMateriaPrimaBean(){
		dtoFactory=FactoryDTO.getInstance();
	}

	public boolean actualizarStock(CantidadMateriaPrima cmp, boolean agregar) {
		return false;
	}

	public boolean generarPedidoProveedores(CantidadMateriaPrima cmp) {
		return false;
	}

	public boolean verificarMateriasPrimas(PedidoFabricacion pf) {
		return false;
	}

	public List<StockMateriaPrimaDTO> recibirProvedores(List<StockMateriaPrimaDTO> actualizacionStock) {
		Vector<StockMateriaPrimaDTO> toreturn = new Vector<StockMateriaPrimaDTO>();
		for(StockMateriaPrimaDTO materialActualizar: actualizacionStock){

			//1. Verificar si ya existe la MP
			MateriaPrima mp = manager.find(MateriaPrima.class, materialActualizar.getMateriaPrima().getRef());
			if(mp==null){
//				mp = dtoFactory.mpFromDTO(materialActualizar.getMateriaPrima());
				manager.persist(dtoFactory.mpFromDTO(materialActualizar.getMateriaPrima()));
				manager.flush();
			}
			//2. Verificar si ya hay materias primas			

			List<StockMateriaPrima> lista = manager.createQuery("select m from StockMateriaPrima m").getResultList();

			StockMateriaPrima actual = null ;

			for (StockMateriaPrima aux : lista) {
				if (aux.getMateriaPrima() == mp){
					actual = aux ;
				}
			}

			if(actual!=null){
				actual.setCantidad(actual.getCantidad()+materialActualizar.getCantidad());
				manager.merge(actual);
				materialActualizar.setCantidad(actual.getCantidad());
			}else{
				StockMateriaPrima newMaterial = dtoFactory.dtoTosmp(materialActualizar);
				manager.persist(newMaterial);
			}
			toreturn.add(materialActualizar);
		}
		return toreturn;
	}

	public MateriaPrimaDTO getMateriaPrimaByRef(String ref) {
		MateriaPrima mp = manager.find(MateriaPrima.class, ref);
		return dtoFactory.mpToDto(mp);
	}
}
